package cn.qhuan.modules.mapper;

import cn.qhuan.modules.dtos.WorksDto;

import cn.qhuan.modules.entity.Works;
import cn.qhuan.modules.vo.WorksVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Description: 作品表
 * @Author: 司翔宇
 * @Date:   2020-12-18
 * @Version: V1.0
 */
@Mapper
public interface WorksMapper extends BaseMapper<Works> {
    /**
     * 根据类别id查询关联的作品
     * @param id
     * @return
     */
    public List<String > findWorksIdsByClassId(String id);

    /**
     * 根据专题id查询关联的作品
     * @param id
     * @return
     */
    public List<String> findWorksIdsBySpecialId(String id);

    /**
     * 根据展厅id查询关联的作品
     * @param id
     * @return
     */
    public List<String> findWorksIdsByEhxhiId(String id);

    /**
     * 设置作品与展厅的关系
     * @param uuid
     * @param worksId
     * @param exhiId
     */
    public void  addWorksToExhi(String uuid, String worksId, String exhiId);

    /**
     * 设置作品与专题的关系
     * @param uuid
     * @param worksId
     * @param specId
     */
    public void addWorksToSpec(String uuid, String worksId, String specId);

    /**
     * 设置作品与类别的关系
     * @param uuid
     * @param worksId
     * @param typeId
     */
    public void addWorksToType(String uuid, String worksId, String typeId);

    /**
     * 设置作品与朝代的关系
     * @param uuid
     * @param worksId
     * @param dynastyId
     */
    public void addWorksToDynasty(String uuid, String worksId, String dynastyId);
    /**
     * 设置作品与艺术家的关系
     * @param uuid
     * @param worksId
     * @param artistId
     */
    public void addWorksToArtistId(String uuid, String worksId, String artistId);

    /**
     * 设置作品与标签的关系
     * @param uuid
     * @param worksId
     * @param tagId
     */
    public void addWorksToTag(String uuid, String worksId, String tagId);

    /**
     * 查询作品在朝代关联表中出现的次数
     * @param worksId
     * @param
     * @return
     */
    public Integer selectWorksCountToDyn(String worksId);
    /**
     * 查询作品在展厅关联表中出现的次数
     * @param worksId
     * @param
     * @return
     */
    public Integer selectWorksCountToExhi(String worksId);
    /**
     * 查询作品在专题关联表中出现的次数
     * @param worksId
     * @param
     * @return
     */
    public Integer selectWorksCountToSpec(String worksId);
    /**
     * 查询作品在与艺术家关联表中出现的次数
     * @param worksId
     * @param
     * @return
     */
    public Integer selectWorksCountToArt(String worksId);
    /**
     * 查询作品在与类别关联表中出现的次数
     * @param worksId
     * @param
     * @return
     */
    public Integer selectWorksCountToType(String worksId);

    /**
     * 查询作品在与标签关联表中出现的次数
     * @param worksId
     * @return
     */
    public Integer selectWorksCountToTag(String worksId);

    /**
     * 删除作品与朝代的关系
     * @param worksId
     * @param
     */
    public void deleteDynastyAssociation(String worksId);
    /**
     * 删除作品与艺术家的关系
     * @param worksId
     * @param
     */
    public void deleteArtistAssociation(String worksId);
    /**
     * 删除作品与展厅的关系
     * @param worksId
     * @param
     */
    public void deleteExhiAssociation(String worksId);
    /**
     * 删除作品与专题的关系
     * @param worksId
     * @param
     */
    public void deleteSpecialAssociation(String worksId);
    /**
     * 删除作品与类别的关系
     * @param worksId
     * @param
     */
    public void deleteTypeAssociation(String worksId);

    /**
     * 删除作品与标签的关系
     * @param worksId
     */
    public void deleteTagAssociation(String worksId);

    /**
     * 查询所有作品数量
     * @return
     */
    public Integer selectWorksCount();

    /**
     * 关键字模糊查询所有
     * @param dto
     * @return
     */
    public Integer selectCountByKeyWord(@Param("dto") WorksDto dto);

    /**
     * 条件分页查询
     * @param dto
     * @return
     */
    public List<WorksVO> findListAndPage(@Param("dto") WorksDto dto);

    /**
     * 分页条件查询的数量
     * @param dto
     * @return
     */
    public int findListCount(@Param("dto") WorksDto dto);
}
